(for Internet Explorer)
ReDim  g_debug_var(10)
デバッグ用グローバル配列変数 g_debug_var。
デバッグが完了したら、g_debug_var を使っているコードを削除してください。
vbslib は、g_debug_var 変数を用意するだけで、アクセスしません。
ブレークする条件を満たしたことを設定するときなどに使用できます。
すべてのモジュールからアクセスすることができ、スコープを超えて通知ができます。
デバッグするときに新しく一時的なグローバル変数を作成することがよくありますが、
その度にどこに配置したらよいかを考えなくて済みます。
デバッガーを使うときは、g_debug_var にウォッチする変数を持つオブジェクトを設定
しておくことで、変数の値を表示しながらステップ実行することができます。
(src)
→ g_DebugVar (clib)
関連
サンプル
gc_NewFunction = True  '//[TODO] 一時的なグローバル変数
新機能の外:
テスト対象の中の中:
If ... Then  g_debug_var( 1 ) = True
    :
If g_debug_var( 1 ) Then  Stop
2つ目の条件を満たしたことを通知しています。
Stop する条件を満たしたことを通知しています。
テスト対象の中:
If ... Then  g_debug_var( 0 ) = True
    :
If g_debug_var( 0 ) Then  Stop
条件付きブレークをする
補足
作成中の新機能を一時的に有効にするときは、g_debug_var を使わずに、
一時的なグローバル変数を作成してください。
新機能の中:
If gc_NewFunction Then  NewFunction
If g_count_up(0)=0 Then  Stop '// watch-> g_count [TODO]
echo_v "g_count(0)=" & g_count(0)
If g_count_up(0)=2 Then  Stop
Function  g_count_up( i as integer ) as integer
グローバル配列変数 g_count の1つの配列要素の値を+1します。
→ スルーカウンタ
【引数】
i
カウンタの種類の番号、配列要素番号(0以上)
新しい配列要素の値
返り値
デバッグ用です。 参考
問題が発生した場所の少し前でブレークさせたい場所で、まず下記のように記述します。
複数のカウンタを使うときは引数 0 を変えてください
実行させてエラーが発生した場所でブレークしたら、g_count(0) の値をウォッチします。
0 は、g_count_up の ( ) の中と同じです。 ウォッチするのは、g_count_up ではないことに
注意してください。
g_count(0) の値がウォッチした値と一致したらブレークするように、記述を変更します。
0
  0
2
再び最初から実行させると、上記の Stop で止まります。
g_count(0)
← ウォッチ
← g_count(0) をウォッチしたら 2 だった場合
(src)
関連
→ スルーカウンタ (C言語 - errors)
0
特定の条件を満たしたときだけブレークしたいときは、次のように記述します。
If ... Then  SetVar "Stop1", 1    '// 条件の判定 [TODO]
   :
If GetVar( "Stop1" ) Then  Stop   '// ブレークする場所 [TODO]
出力ファイルの内容に問題があるときは、ファイル名を指定するだけで、
ファイルの出力を開始するところでブレークさせることができます。
参考
ファイルの内容をウォッチします。
ファイルの内容を、下記の順番で
(下記 ${Tmp})にコピーします。
StepNum_001_to_002.txt
${Tmp}\ReplaceSteps\Before
${Tmp}\ReplaceSteps\After_
フォルダー
ファイル
StepNum_001_to_002.txt
@
A
B
A
StepNum_002_to_003.txt
StepNum_002_to_003.txt
B
StepNum_003_to_004.txt
@〜C は、
関連
.BreakStepNum
を呼び出した回数に対応します。
初めて呼び出したときは、
    Before\StepNum_001_to_002.txt
にウォッチしているファイルのコピーが作られます。 2回目に呼び出したときは、
    After_\StepNum_001_to_002.txt
にウォッチしているファイルのコピーが作られます。 3回目に呼び出したときは、
    Before\StepNum_002_to_003.txt
に、After_\StepNum_001_to_002.txt のコピーと、
    After_\StepNum_002_to_003.txt
に、ウォッチしているファイルのコピーが作られます。 それ以降は、3回目に呼び出した
ときと、同様に2つのコピーが作られていきます。
よって、ファイルの内容が変化する様子を確認したいときは、Before フォルダーと After_
フォルダーを比較すればよいことになります。
ウォッチするファイルを変更するときは、
を呼び出します。
StepNum_003_to_004.txt
C
たとえば、A が付いている
    After_\StepNum_001_to_002.txt

    Before\StepNum_002_to_003.txt
の両方が、2回目に指定したファイルと同じ内容になります。
たとえば、StepNum_003_to_004.txt のファイルが最後のコピーだったときに、
FileWatcher_setNewFile 関数を呼び出したら、次に作られるコピーは、
    Before\StepNum_005_to_006.txt
だけです。 StepNum_004_to_005.txt は、作られません。
拡張子は、ウォッチしているファイルと同じ拡張子になります。
FileWatcher_copyAFileToTheLog 関数を呼び出すと、標準出力に下記のように出力
します。 ただし、1回目の呼び出しでは、比較する相手がいないので、出力しません。
FileWatcher >> C:\Users\user1\AppData\Local\Temp\Report\〜\ReplaceSteps
FileWatcher >> StepNum_001_to_002.txt
その関数を呼び出す前後のファイルは、比較しないようになります。
Sub  FileWatcher_copyAFileToTheLog( in_WatchingPath as string )
現在のファイルの内容を記録します。
ソース
→ vbslib.vbs
【引数】
in_WatchingPath
ウォッチしているファイルのパス
Sub  FileWatcher_setNewFile()
次に記録するファイルを、比較を開始するファイルにします。
ソース
→ vbslib.vbs
Test.vbs のコールバック関数を呼び出すタイミングでコールバックする
に、デバッグ用に作成したコールバック関数を登録してください。
参考
Dim  g_verbose as boolean
Verbose モードが有効かどうか。
ファイル:
vbs_inc_sub.vbs
Verbose モードが有効であるときは、内部処理の内容を詳しく表示しながら実行します。
サンプル (デバッグ時)
サンプル (開発時)
g_verbose = 1
  FuncA
pause
If g_verbose Then  echo_v  "処理は1つも行われませんでした。"
Verbose モードで内部処理を表示する主な目的は、行われるはずの処理が行われて
いない不具合を解決することです。 処理が行われなかった
ことを中心に表示してください。 そうしないと、必要な情報が多くのノイズ(情報)に
隠れてしまいます。  とりあえず Verbose モードで動かし、そこからどの情報を詳しく
表示するようにすればいいか、どのオブジェクトを GetEchoStr で表示させるとよいか
をガイドできればよいでしょう。
関連
FuncA の処理内容を詳しく表示します。
テスト
→ T_Verbose.vbs # [T_Verbose]
プログラムが処理内容に対してメタな処理になっているときに処理のステップを表示
したいときは、そのモジュールのメンバーに Verbose モードを追加してください。
Sub  SetupDebugTools()
  '--- start of parameters for vbslib include ---------
  g_debug = 0          '// release:0, debug:99, -1:call SetupDebugTools
  Sub SetupDebugTools() : set_input "" : SetBreakByFName Empty : End Sub
g_debug = 99  '// 上書きすることで、上記のデフォルトのコードを保護します。
Sub SetupDebugTools()  '// 関数も前の定義を上書きできます。
 del "C:\Users\user1\Desktop\TestData"
 set_input "1."
 SetBreakByFName "Out.xml"
End Sub
サンプル:
デバッグ時に main 関数を呼び出す直前で呼び出される関数。
また、この関数の中では、利便性のために
を発しません。
ただし、ファイルパスを指定するときは変数を使わないようにするなどして、予想外のファイル
を壊さないように注意してください。
(src)
通常、vbslib include に、SetupDebugTools 関数の定義を記述します。
デバッグ用に何らかの設定をしたり、ファイルを初期状態に戻すなどの処理を、この関数の
中に定義してください。 main 関数の最初に記述しても同じことができますが、vbslib を
インクルードする前に、vbslib など vbs_inc でインクルードする関数が使え、g_debug の設定
の直後に処理を記述できるため、デバッグ用のコードを一般のコードと区別できます。
テスト
Sub  WS2( Label as string, Value as variant )
Sub  WD2( Label as string, Value as variant )
Sub  WX2( Label as string, Value as variant )
Sub  MARK( Label as string, out_Count as variant )
ブレークしないで、変数の値を標準出力へ表示します。
スレッドの通過を表示します
文字列値を表示します
数値を表示します
数値を16進数で表示します
<WATCH label="var1" value="123"/>
出力例:
サンプル:
Dim  var1 : var1 = 123
WD2  "var1", var1
Dim  var1 : var1 = 123
Execute WD("var1")
Function  WD( Expression as string ) as string
Function  WS( Expression as string ) as string
Function  WX( Expression as string ) as string
数値を16進数で表示するコードを返します
数値を表示するコードを返します
文字列値を表示するコードを返します
(src)
MARK  "a", 0
関連
デバッガーを使うときは、
にウォッチする変数を持つオブジェクトを設定しておくことで、
変数の値を表示しながらステップ実行することができます。
エラーが発生した後の処理を、デバッグする方法を示します。
まず、エラーが発生した瞬間を捕らえて、その場所に Stop 命令を記述します。
参考
… Stop 命令
を 99 など大きな数に設定して起動します。
Stop したら、ステップ実行します。
1.
2.
3.
"<OneFile  name="""+ one_element +"""/>"
For Each  one_element  In  module.Delegate.Elements
Set module = element.OutModuleTypes.Item(k)
Set element = find_.OutElements.Item( element_name )
Set find_ = new
 (.txt)
as CrossFind_OutElementClass
↑CrossFind_ModuleClass
 (.txt)
 (.txt)
array of string
データのインデックスを探す
echo_v  "333=> element_name = "+ GetEchoStr( element_name )
echo_v  "222=> k = "+ GetEchoStr( k )
echo_v  "111=> kk = "+ GetEchoStr( kk )
kk = kk + 1
この色の文字
kk = 0
で書かれたデバッグ用コードを入れて、データのインデックスを探す。
1.
データを格納する場所(複数)は、変数名を単語単位で全文検索すれば分かることが多いです。
多くヒットしてしまうときは、クラス名で絞り込むか、データの値を print/echo して絞り込んでください。
Set g_debug_var(9) = root_object

echo_v  "999=> "+ g_debug_var(9).OutElements( "1.c" ).OutModuleTypes(1).Delegate.Elements(2)
2.
インデックスを入れた、データ構造のルート(下記の find_ )からたどるコードを書く
上記は、VBScript のコードです。
… 辞書のキー
… 配列番号
… For Each から
  配列番号
↑辞書のキー
↑配列番号

配列番号
また、データをどこのコードでも参照できるように、下記のように、調べるデータをルートからたどるための
インデックスを調べておくとよいでしょう。
データに関するデバッグは、そのデータを計算するときの入力データと、計算内容を確認することです。
入力データの入力データもあります。 最も元となる入力データからのツリー構造になります。
プログラムは、大量のデータのすべてに関して、元に近いほうから計算(処理)することです。
フロー
データA
データB
データC
データD (NG)
フロー
確認する
確認する
echo_v  new_BinaryArrayAsText( "漢字", Empty ).xml
If InStr( Name, "value" ) >= 1 Then  Stop:OrError '// TODO:
echo_v  "111=> variable = "+ GetEchoStr( variable )
'//■ TODO: Coding of ***********
echo_v  "111=>"
If g_count_up(0)=0 Then  Stop:OrError '// TODO:
echo_v "g_count(0)=" & g_count(0)
Stop:OrError '// TODO:***********
Array _
0 : Skipped
Skipped : If False Then
End If
変数の値を表示する。 特にループの中。
多くの変数値を見るときは、
下記のコードをすぐに開ける場所に置いておけば、デバッグ時にコピーするだけで
デバッグに必要な情報を集めることができるようになります。
必要なら赤字の部分を変更してください。
111
variable
variable
CPU がこの経路を通過したこと、処理が行われたことを表示する。
111
InStr( Name, "value" ) >= 1
指定の条件を満たしたときに、ブレークする。
指定した回数を通過したときに、ブレークする。
バイナリーをダンプする。
"漢字"
ブレークする。
現在編集中の場所を強調表示する。 未確定のコードであることを示す。
処理をスキップする。 主にテスト プログラム用。
配列形式のデータをスキップする。
スキップするデータを Array _ の行と 0 : Skipped の行の間に、
一時的に移動します。 このコードは、何も処理が行われません。
でよく使われます。
スキップする処理を If 〜 End If で挟みます。